/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package co.edu.sena.zocode.controlador.servlet;

import co.edu.sena.zocode.controlador.validaciones.ValidacionFormularios;
import co.edu.sena.zocode.modelo.DAO.ProductoDAO;
import co.edu.sena.zocode.modelo.VO.CategoriaVO;
import co.edu.sena.zocode.modelo.VO.PresentacionVO;
import co.edu.sena.zocode.modelo.VO.ProductoVO;
import co.edu.sena.zocode.modelo.VO.UnidadMedidaVO;
import com.google.gson.Gson;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author SANDRA
 */
public class ProductoServlet extends HttpServlet {

    /**
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
     * methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        try (PrintWriter out = response.getWriter()) {

            String url = request.getRequestURL().toString();

            if (url.contains("agregarProductos")) {

                String nombre_prod = request.getParameter("txtnombre_prod");
                String codigoProducto = request.getParameter("txtcodProducto");
                int categoria;
                int presentacion;
                int unidadMedida;
                try {
                    categoria = Integer.parseInt(request.getParameter("cmbcategoria"));
                    presentacion = Integer.parseInt(request.getParameter("cmbpresentacion"));
                    unidadMedida = Integer.parseInt(request.getParameter("cmbunidadMedida"));

                } catch (NumberFormatException e) {

                    categoria = 5;
                    presentacion = 4;
                    unidadMedida = 5;
                }
                CategoriaVO categNuevoProd = new CategoriaVO();
                PresentacionVO presNuevoProd = new PresentacionVO();
                UnidadMedidaVO unitNuevoProducto = new UnidadMedidaVO();

                categNuevoProd.setIdCategoria(categoria);
                presNuevoProd.setIdPresentacion(presentacion);
                unitNuevoProducto.setIdUnidadMedida(unidadMedida);
                //HACER VALIDACIONES!!!!!
                ProductoVO nuevoProducto = new ProductoVO(nombre_prod, codigoProducto, categNuevoProd,
                        presNuevoProd, unitNuevoProducto);

                if (ValidacionFormularios.validarCamposRegistroProductoNuevo(nuevoProducto)) {
                    String falm = "Faltan campos por llenar o su escritura es incorrecta.";
                    out.print(new Gson().toJson(falm));
                } else {
                    agregarProductos(response, nuevoProducto, out);
                }
            } else if (url.contains("consultarProductos")) {
                consultarProductos(request, response);
            }

        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

    private void agregarProductos(HttpServletResponse response, ProductoVO nuevoProducto, PrintWriter out) throws IOException {
        ProductoDAO edao = new ProductoDAO();
        int res = edao.insertarProductos(nuevoProducto);
        String mensaje;
        if (res < 1) {
            mensaje = "¡¡No se pudo guardar la informacion!!";
        } else {
            mensaje = "¡¡La informacion se guardo correctamente";
        }
        out.print(new Gson().toJson(mensaje));
    }

    private void consultarProductos(HttpServletRequest request, HttpServletResponse response) {
        try {
            ProductoDAO consultaProductos = new ProductoDAO();
            ArrayList<ProductoVO> lista = consultaProductos.consultarProductos();
            request.setAttribute("lista", lista);
            request.getRequestDispatcher("consultarProductos.jsp").forward(request, response);
            response.sendRedirect("consultarProductos.jsp");

        } catch (ServletException | IOException e) {
            e.printStackTrace();
        }
    }

}
